package com.sss.hloster0703;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.Scanner;

public class TestField {

	public static void main(String[] args) {
		test01();
	}

	private static void test01() {
		try {
			Class c = Class.forName("com.sss.hloster0703.Sub");
			Scanner sc = new Scanner(System.in);
			System.out.println("请输入你想要获取的 Sub 类的哪属性的类型：");
			String name = sc.next();
			// 通过指定属性名获取属性对象
			Field sf = c.getDeclaredField(name);
			// 得到属性类型
			System.out.println("Sub 类" + name + "属性的类型为：" + sf.getType());
			System.out.println("**********************************************");
			// 返回Field 对象数组，存放该类或接口的所有属性（不含继承的）
			Field flist[] = c.getDeclaredFields();
			//Field flist[] = c.getFields();
			System.out.println("Sub 类 getDeclaredField() 得到的属性如下： ");
			// 遍历所有属性
			for (int i = 0; i < flist.length; i++) {
				System.out.println("********************************************");
				Field f = flist[i];
				System.out.println("属性" + (i + 1) + "名称为：" + f.getName());// 得到属性名
				System.out.println("该属性所在的类或接口为： " + f.getDeclaringClass());
				System.out.println("该属性的类型为：" + f.getType());// 得到属性类型
				// 以整形形式返回由此Field 对象表示的属性的Java访问权限修饰符
				int m = f.getModifiers();
				// 使用Modifier 类对表示访问权限修饰符的整数进行解码显示
				System.out.println("该属性的修饰符为：：" + Modifier.toString(m));
			}
		} catch (Exception e) {

			e.printStackTrace();
		}
	}
}
